אני מאז ומתמיד משתמש בזה, אני יודע בערך למה זה נועד, אבל לא במדויק. אשמח להסבר, תודה רבה.
9 תשובות
מתודה סטטית זו מתודה שלא קשורה למופע של מחלקה. כך למשל מתודה של חיפוש משתמשים בבסיס הנתונים תהיה סטטית (כי היא לא קשורה למופע מסוים של המחלקה).
אותו רעיון חל על משתנה סטטי בפונקציה. הוא לא קשור לקריאה מסוימת של הפונקציה, אלא לפונקציה באופן כללי. (הוא משותף לכל הקריאות לפונקציה.) כך תוכל, למשל, לספור כמה פעמים קראו לפונקציה.
{
static $callsCount = 0;
return ++$callsCount;
}
$count = foo();
$count = foo();
echo $count; // prints 2
אף פונקציה לא אמורה להיות סטטית. וכמה שיותר תצמד לכלל הזה, ככה הקוד שלך יהיה טוב יותר.
תודה לתגובה הראשונה, ואלכס, התכוונתי למתודות סטטיות במחלקה, אתה מתכוון שעדיף לא להשתמש במתודות סטטיות במחלקה?
בדיוק.
אם יש לך מטודה סטטית זה כנראה אומר שהיא לא אמורה להיות במחלקה.
מה עם הדוגמה שנתתי למעלה, אלכס? אני לא הולך ליצור מחלקה נפרדת של פעולות שונות של User שלא קשורות למופע מסוים של מחלקה.
אלכס מה תגיד על המחלקה הזאת ? שהיא לא טובה לדעתך ?
http://pastebin.com/gV7kkyfr
אני משער שבשביל לקבל מידע על סשן מסוים לא צריך לקבוע מופע חדש, אלא עדיף לקבל ע"י מטודה סטטית.
בוא תסביר לי פה את הטעות ואיך לתקן אותה. תודה.
בשביל דבר כזה אני אישית דווקא לא הייתי משתמש בסטטי. init() היה בבנאי שלי, ו-destroy() היה בדיסטרקטור שלי.
עריכה:
צודק, זה צריך להיות סינגלטון.
אתה באותה מידה יכול לעשות ככה: http://phpassist.com/7e982#4